

<!DOCTYPE html>
<html class="writer-html5" lang="en" >
<head>
  <meta charset="utf-8" />
  
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  
  <title>Bucket Notifications &mdash; Ceph Documentation</title>
  

  
  <link rel="stylesheet" href="../../_static/ceph.css" type="text/css" />
  <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
  <link rel="stylesheet" href="../../_static/graphviz.css" type="text/css" />
  <link rel="stylesheet" href="../../_static/css/custom.css" type="text/css" />

  
  
    <link rel="shortcut icon" href="../../_static/favicon.ico"/>
  

  
  

  

  
  <!--[if lt IE 9]>
    <script src="../../_static/js/html5shiv.min.js"></script>
  <![endif]-->
  
    
      <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
        <script src="../../_static/jquery.js"></script>
        <script src="../../_static/underscore.js"></script>
        <script src="../../_static/doctools.js"></script>
    
    <script type="text/javascript" src="../../_static/js/theme.js"></script>

    
    <link rel="index" title="Index" href="../../genindex/" />
    <link rel="search" title="Search" href="../../search/" />
    <link rel="next" title="Rados 网关的数据布局" href="../layout/" />
    <link rel="prev" title="Archive 同步模块" href="../archive-sync-module/" /> 
</head>

<body class="wy-body-for-nav">

   
  <header class="top-bar">
    

















<div role="navigation" aria-label="breadcrumbs navigation">

  <ul class="wy-breadcrumbs">
    
      <li><a href="../../" class="icon icon-home"></a> &raquo;</li>
        
          <li><a href="../">Ceph 对象网关</a> &raquo;</li>
        
      <li>Bucket Notifications</li>
    
    
      <li class="wy-breadcrumbs-aside">
        
          
            <a href="../../_sources/radosgw/notifications.rst.txt" rel="nofollow"> View page source</a>
          
        
      </li>
    
  </ul>

  
  <hr/>
</div>
  </header>
  <div class="wy-grid-for-nav">
    
    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
      <div class="wy-side-scroll">
        <div class="wy-side-nav-search"  style="background: #eee" >
          

          
            <a href="../../">
          

          
            
            <img src="../../_static/logo.png" class="logo" alt="Logo"/>
          
          </a>

          

          
<div role="search">
  <form id="rtd-search-form" class="wy-form" action="../../search/" method="get">
    <input type="text" name="q" placeholder="Search docs" />
    <input type="hidden" name="check_keywords" value="yes" />
    <input type="hidden" name="area" value="default" />
  </form>
</div>

          
        </div>

        
        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
          
            
            
              
            
            
              <ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../../start/intro/">Ceph 简介</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../install/">安装 Ceph</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../cephadm/">Cephadm</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../rados/">Ceph 存储集群</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../cephfs/">Ceph 文件系统</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../rbd/">Ceph 块设备</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="../">Ceph 对象网关</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="../frontends/">HTTP 前端</a></li>
<li class="toctree-l2"><a class="reference internal" href="../placement/">存储池归置与存储类</a></li>
<li class="toctree-l2"><a class="reference internal" href="../multisite/">多站配置</a></li>
<li class="toctree-l2"><a class="reference internal" href="../multisite-sync-policy/">多站同步策略配置</a></li>
<li class="toctree-l2"><a class="reference internal" href="../pools/">存储池的配置</a></li>
<li class="toctree-l2"><a class="reference internal" href="../config-ref/">配置参考</a></li>
<li class="toctree-l2"><a class="reference internal" href="../admin/">管理指南</a></li>
<li class="toctree-l2"><a class="reference internal" href="../s3/">S3 API</a></li>
<li class="toctree-l2"><a class="reference internal" href="../rgw-cache/">Data caching and CDN</a></li>
<li class="toctree-l2"><a class="reference internal" href="../swift/">Swift API</a></li>
<li class="toctree-l2"><a class="reference internal" href="../adminops/">管理操作 API</a></li>
<li class="toctree-l2"><a class="reference internal" href="../api/">Python 接口</a></li>
<li class="toctree-l2"><a class="reference internal" href="../nfs/">通过 NFS 导出</a></li>
<li class="toctree-l2"><a class="reference internal" href="../keystone/">与 OpenStack Keystone 对接</a></li>
<li class="toctree-l2"><a class="reference internal" href="../barbican/">与 OpenStack Barbican 对接</a></li>
<li class="toctree-l2"><a class="reference internal" href="../vault/">与 HashiCorp Vault 对接</a></li>
<li class="toctree-l2"><a class="reference internal" href="../kmip/">KMIP Integration</a></li>
<li class="toctree-l2"><a class="reference internal" href="../opa/">与 Open Policy Agent 对接</a></li>
<li class="toctree-l2"><a class="reference internal" href="../multitenancy/">多租户</a></li>
<li class="toctree-l2"><a class="reference internal" href="../compression/">压缩</a></li>
<li class="toctree-l2"><a class="reference internal" href="../ldap-auth/">LDAP 认证</a></li>
<li class="toctree-l2"><a class="reference internal" href="../encryption/">服务器端加密</a></li>
<li class="toctree-l2"><a class="reference internal" href="../bucketpolicy/">桶策略</a></li>
<li class="toctree-l2"><a class="reference internal" href="../dynamicresharding/">动态的桶索引重分片</a></li>
<li class="toctree-l2"><a class="reference internal" href="../mfa/">多因子认证</a></li>
<li class="toctree-l2"><a class="reference internal" href="../sync-modules/">同步模块</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">Bucket Notifications</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../s3-notification-compatibility/">S3 Bucket Notification Compatibility</a></li>
<li class="toctree-l3"><a class="reference internal" href="#notification-reliability">Notification Reliability</a></li>
<li class="toctree-l3"><a class="reference internal" href="#topic-management-via-cli">Topic Management via CLI</a></li>
<li class="toctree-l3"><a class="reference internal" href="#notification-performance-stats">Notification Performance Stats</a></li>
<li class="toctree-l3"><a class="reference internal" href="#bucket-notification-rest-api">Bucket Notification REST API</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#topics">Topics</a></li>
<li class="toctree-l4"><a class="reference internal" href="#notifications">Notifications</a></li>
<li class="toctree-l4"><a class="reference internal" href="#events">Events</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../layout/">RADOS 中的数据布局</a></li>
<li class="toctree-l2"><a class="reference internal" href="../STS/">STS</a></li>
<li class="toctree-l2"><a class="reference internal" href="../STSLite/">STS Lite</a></li>
<li class="toctree-l2"><a class="reference internal" href="../keycloak/">Keycloak</a></li>
<li class="toctree-l2"><a class="reference internal" href="../role/">Role</a></li>
<li class="toctree-l2"><a class="reference internal" href="../session-tags/">Session Tags</a></li>
<li class="toctree-l2"><a class="reference internal" href="../orphans/">Orphan List and Associated Tooliing</a></li>
<li class="toctree-l2"><a class="reference internal" href="../oidc/">OpenID Connect Provider</a></li>
<li class="toctree-l2"><a class="reference internal" href="../troubleshooting/">故障排除</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../man/8/radosgw/">radosgw 手册页</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../man/8/radosgw-admin/">radosgw-admin 手册页</a></li>
<li class="toctree-l2"><a class="reference internal" href="../qat-accel/">使用 QAT 为加密和压缩提速</a></li>
<li class="toctree-l2"><a class="reference internal" href="../s3select/">S3-select</a></li>
<li class="toctree-l2"><a class="reference internal" href="../lua-scripting/">Lua Scripting</a></li>
<li class="toctree-l2"><a class="reference internal" href="../d3n_datacache/">D3N Data Cache</a></li>
<li class="toctree-l2"><a class="reference internal" href="../cloud-transition/">Cloud Transition</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../../mgr/">Ceph 管理器守护进程</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../mgr/dashboard/">Ceph 仪表盘</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../api/">API 文档</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../architecture/">体系结构</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../dev/developer_guide/">开发者指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../dev/internals/">Ceph 内幕</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../governance/">项目管理</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../foundation/">Ceph 基金会</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../ceph-volume/">ceph-volume</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../releases/general/">Ceph 版本（总目录）</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../releases/">Ceph 版本（索引）</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../security/">Security</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../glossary/">Ceph 术语</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../jaegertracing/">Tracing</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../translation_cn/">中文版翻译资源</a></li>
</ul>

            
          
        </div>
        
      </div>
    </nav>

    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">

      
      <nav class="wy-nav-top" aria-label="top navigation">
        
          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
          <a href="../../">Ceph</a>
        
      </nav>


      <div class="wy-nav-content">
        
        <div class="rst-content">
        
          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
           <div itemprop="articleBody">
            
<div id="dev-warning" class="admonition note">
  <p class="first admonition-title">Notice</p>
  <p class="last">This document is for a development version of Ceph.</p>
</div>
  <div id="docubetter" align="right" style="padding: 5px; font-weight: bold;">
    <a href="https://pad.ceph.com/p/Report_Documentation_Bugs">Report a Documentation Bug</a>
  </div>

  
  <div class="section" id="bucket-notifications">
<h1><a class="toc-backref" href="#id1">Bucket Notifications</a><a class="headerlink" href="#bucket-notifications" title="Permalink to this headline">¶</a></h1>
<div class="versionadded">
<p><span class="versionmodified added">New in version Nautilus.</span></p>
</div>
<div class="contents topic" id="contents">
<p class="topic-title">Contents</p>
<ul class="simple">
<li><p><a class="reference internal" href="#bucket-notifications" id="id1">Bucket Notifications</a></p>
<ul>
<li><p><a class="reference internal" href="#notification-reliability" id="id2">Notification Reliability</a></p></li>
<li><p><a class="reference internal" href="#topic-management-via-cli" id="id3">Topic Management via CLI</a></p></li>
<li><p><a class="reference internal" href="#notification-performance-stats" id="id4">Notification Performance Stats</a></p></li>
<li><p><a class="reference internal" href="#bucket-notification-rest-api" id="id5">Bucket Notification REST API</a></p>
<ul>
<li><p><a class="reference internal" href="#topics" id="id6">Topics</a></p>
<ul>
<li><p><a class="reference internal" href="#create-a-topic" id="id7">Create a Topic</a></p></li>
<li><p><a class="reference internal" href="#get-topic-attributes" id="id8">Get Topic Attributes</a></p></li>
<li><p><a class="reference internal" href="#get-topic-information" id="id9">Get Topic Information</a></p></li>
<li><p><a class="reference internal" href="#delete-topic" id="id10">Delete Topic</a></p></li>
<li><p><a class="reference internal" href="#list-topics" id="id11">List Topics</a></p></li>
</ul>
</li>
<li><p><a class="reference internal" href="#notifications" id="id12">Notifications</a></p></li>
<li><p><a class="reference internal" href="#events" id="id13">Events</a></p></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<p>Bucket notifications provide a mechanism for sending information out of the radosgw when certain events are happening on the bucket.
Currently, notifications could be sent to: HTTP, AMQP0.9.1 and Kafka endpoints.</p>
<p>Note, that if the events should be stored in Ceph, in addition, or instead of being pushed to an endpoint,
the <a class="reference external" href="../pubsub-module">PubSub Module</a> should be used instead of the bucket notification mechanism.</p>
<p>A user can create different topics. A topic entity is defined by its name and is per tenant. A
user can only associate its topics (via notification configuration) with buckets it owns.</p>
<p>In order to send notifications for events for a specific bucket, a notification entity needs to be created. A
notification can be created on a subset of event types, or for all event types (default).
The notification may also filter out events based on prefix/suffix and/or regular expression matching of the keys. As well as,
on the metadata attributes attached to the object, or the object tags.
There can be multiple notifications for any specific topic, and the same topic could be used for multiple notifications.</p>
<p>REST API has been defined to provide configuration and control interfaces for the bucket notification
mechanism. This API is similar to the one defined as the S3-compatible API of the pubsub sync module.</p>
<div class="toctree-wrapper compound">
<ul>
<li class="toctree-l1"><a class="reference internal" href="../s3-notification-compatibility/">S3 Bucket Notification Compatibility</a></li>
</ul>
</div>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>To enable bucket notifications API, the <cite>rgw_enable_apis</cite> configuration parameter should contain: “notifications”.</p>
</div>
<div class="section" id="notification-reliability">
<h2><a class="toc-backref" href="#id2">Notification Reliability</a><a class="headerlink" href="#notification-reliability" title="Permalink to this headline">¶</a></h2>
<p>Notifications may be sent synchronously, as part of the operation that triggered them.
In this mode, the operation is acked only after the notification is sent to the topic’s configured endpoint, which means that the
round trip time of the notification is added to the latency of the operation itself.</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>The original triggering operation will still be considered as successful even if the notification fail with an error, cannot be deliverd or times out</p>
</div>
<p>Notifications may also be sent asynchronously. They will be committed into persistent storage and then asynchronously sent to the topic’s configured endpoint.
In this case, the only latency added to the original operation is of committing the notification to persistent storage.</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>If the notification fail with an error, cannot be deliverd or times out, it will be retried until successfully acked</p>
</div>
<div class="admonition tip">
<p class="admonition-title">Tip</p>
<p>To minimize the added latency in case of asynchronous notifications, it is recommended to place the “log” pool on fast media</p>
</div>
</div>
<div class="section" id="topic-management-via-cli">
<h2><a class="toc-backref" href="#id3">Topic Management via CLI</a><a class="headerlink" href="#topic-management-via-cli" title="Permalink to this headline">¶</a></h2>
<p>Configuration of all topics, associated with a tenant, could be fetched using the following command:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1"># radosgw-admin topic list [--tenant={tenant}]</span>
</pre></div>
</div>
<p>Configuration of a specific topic could be fetched using:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1"># radosgw-admin topic get --topic={topic-name} [--tenant={tenant}]</span>
</pre></div>
</div>
<p>And removed using:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1"># radosgw-admin topic rm --topic={topic-name} [--tenant={tenant}]</span>
</pre></div>
</div>
</div>
<div class="section" id="notification-performance-stats">
<h2><a class="toc-backref" href="#id4">Notification Performance Stats</a><a class="headerlink" href="#notification-performance-stats" title="Permalink to this headline">¶</a></h2>
<p>The same counters are shared between the pubsub sync module and the bucket notification mechanism.</p>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">pubsub_event_triggered</span></code>: running counter of events with at least one topic associated with them</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">pubsub_event_lost</span></code>: running counter of events that had topics associated with them but that were not pushed to any of the endpoints</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">pubsub_push_ok</span></code>: running counter, for all notifications, of events successfully pushed to their endpoint</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">pubsub_push_fail</span></code>: running counter, for all notifications, of events failed to be pushed to their endpoint</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">pubsub_push_pending</span></code>: gauge value of events pushed to an endpoint but not acked or nacked yet</p></li>
</ul>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p><code class="docutils literal notranslate"><span class="pre">pubsub_event_triggered</span></code> and <code class="docutils literal notranslate"><span class="pre">pubsub_event_lost</span></code> are incremented per event, while:
<code class="docutils literal notranslate"><span class="pre">pubsub_push_ok</span></code>, <code class="docutils literal notranslate"><span class="pre">pubsub_push_fail</span></code>, are incremented per push action on each notification</p>
</div>
</div>
<div class="section" id="bucket-notification-rest-api">
<h2><a class="toc-backref" href="#id5">Bucket Notification REST API</a><a class="headerlink" href="#bucket-notification-rest-api" title="Permalink to this headline">¶</a></h2>
<div class="section" id="topics">
<h3><a class="toc-backref" href="#id6">Topics</a><a class="headerlink" href="#topics" title="Permalink to this headline">¶</a></h3>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>In all topic actions, the parameters are URL encoded, and sent in the message body using <code class="docutils literal notranslate"><span class="pre">application/x-www-form-urlencoded</span></code> content type</p>
</div>
<div class="section" id="create-a-topic">
<h4><a class="toc-backref" href="#id7">Create a Topic</a><a class="headerlink" href="#create-a-topic" title="Permalink to this headline">¶</a></h4>
<p>This will create a new topic. The topic should be provided with push endpoint parameters that would be used later
when a notification is created.
Upon a successful request, the response will include the topic ARN that could be later used to reference this topic in the notification request.
To update a topic, use the same command used for topic creation, with the topic name of an existing topic and different endpoint values.</p>
<div class="admonition tip">
<p class="admonition-title">Tip</p>
<p>Any notification already associated with the topic needs to be re-created for the topic update to take effect</p>
</div>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">POST</span>

<span class="n">Action</span><span class="o">=</span><span class="n">CreateTopic</span>
<span class="o">&amp;</span><span class="n">Name</span><span class="o">=&lt;</span><span class="n">topic</span><span class="o">-</span><span class="n">name</span><span class="o">&gt;</span>
<span class="p">[</span><span class="o">&amp;</span><span class="n">Attributes</span><span class="o">.</span><span class="n">entry</span><span class="mf">.1</span><span class="o">.</span><span class="n">key</span><span class="o">=</span><span class="n">amqp</span><span class="o">-</span><span class="n">exchange</span><span class="o">&amp;</span><span class="n">Attributes</span><span class="o">.</span><span class="n">entry</span><span class="mf">.1</span><span class="o">.</span><span class="n">value</span><span class="o">=&lt;</span><span class="n">exchange</span><span class="o">&gt;</span><span class="p">]</span>
<span class="p">[</span><span class="o">&amp;</span><span class="n">Attributes</span><span class="o">.</span><span class="n">entry</span><span class="mf">.2</span><span class="o">.</span><span class="n">key</span><span class="o">=</span><span class="n">amqp</span><span class="o">-</span><span class="n">ack</span><span class="o">-</span><span class="n">level</span><span class="o">&amp;</span><span class="n">Attributes</span><span class="o">.</span><span class="n">entry</span><span class="mf">.2</span><span class="o">.</span><span class="n">value</span><span class="o">=</span><span class="n">none</span><span class="o">|</span><span class="n">broker</span><span class="o">|</span><span class="n">routable</span><span class="p">]</span>
<span class="p">[</span><span class="o">&amp;</span><span class="n">Attributes</span><span class="o">.</span><span class="n">entry</span><span class="mf">.3</span><span class="o">.</span><span class="n">key</span><span class="o">=</span><span class="n">verify</span><span class="o">-</span><span class="n">ssl</span><span class="o">&amp;</span><span class="n">Attributes</span><span class="o">.</span><span class="n">entry</span><span class="mf">.3</span><span class="o">.</span><span class="n">value</span><span class="o">=</span><span class="n">true</span><span class="o">|</span><span class="n">false</span><span class="p">]</span>
<span class="p">[</span><span class="o">&amp;</span><span class="n">Attributes</span><span class="o">.</span><span class="n">entry</span><span class="mf">.4</span><span class="o">.</span><span class="n">key</span><span class="o">=</span><span class="n">kafka</span><span class="o">-</span><span class="n">ack</span><span class="o">-</span><span class="n">level</span><span class="o">&amp;</span><span class="n">Attributes</span><span class="o">.</span><span class="n">entry</span><span class="mf">.4</span><span class="o">.</span><span class="n">value</span><span class="o">=</span><span class="n">none</span><span class="o">|</span><span class="n">broker</span><span class="p">]</span>
<span class="p">[</span><span class="o">&amp;</span><span class="n">Attributes</span><span class="o">.</span><span class="n">entry</span><span class="mf">.5</span><span class="o">.</span><span class="n">key</span><span class="o">=</span><span class="n">use</span><span class="o">-</span><span class="n">ssl</span><span class="o">&amp;</span><span class="n">Attributes</span><span class="o">.</span><span class="n">entry</span><span class="mf">.5</span><span class="o">.</span><span class="n">value</span><span class="o">=</span><span class="n">true</span><span class="o">|</span><span class="n">false</span><span class="p">]</span>
<span class="p">[</span><span class="o">&amp;</span><span class="n">Attributes</span><span class="o">.</span><span class="n">entry</span><span class="mf">.6</span><span class="o">.</span><span class="n">key</span><span class="o">=</span><span class="n">ca</span><span class="o">-</span><span class="n">location</span><span class="o">&amp;</span><span class="n">Attributes</span><span class="o">.</span><span class="n">entry</span><span class="mf">.6</span><span class="o">.</span><span class="n">value</span><span class="o">=&lt;</span><span class="n">file</span> <span class="n">path</span><span class="o">&gt;</span><span class="p">]</span>
<span class="p">[</span><span class="o">&amp;</span><span class="n">Attributes</span><span class="o">.</span><span class="n">entry</span><span class="mf">.7</span><span class="o">.</span><span class="n">key</span><span class="o">=</span><span class="n">OpaqueData</span><span class="o">&amp;</span><span class="n">Attributes</span><span class="o">.</span><span class="n">entry</span><span class="mf">.7</span><span class="o">.</span><span class="n">value</span><span class="o">=&lt;</span><span class="n">opaque</span> <span class="n">data</span><span class="o">&gt;</span><span class="p">]</span>
<span class="p">[</span><span class="o">&amp;</span><span class="n">Attributes</span><span class="o">.</span><span class="n">entry</span><span class="mf">.8</span><span class="o">.</span><span class="n">key</span><span class="o">=</span><span class="n">push</span><span class="o">-</span><span class="n">endpoint</span><span class="o">&amp;</span><span class="n">Attributes</span><span class="o">.</span><span class="n">entry</span><span class="mf">.8</span><span class="o">.</span><span class="n">value</span><span class="o">=&lt;</span><span class="n">endpoint</span><span class="o">&gt;</span><span class="p">]</span>
<span class="p">[</span><span class="o">&amp;</span><span class="n">Attributes</span><span class="o">.</span><span class="n">entry</span><span class="mf">.9</span><span class="o">.</span><span class="n">key</span><span class="o">=</span><span class="n">persistent</span><span class="o">&amp;</span><span class="n">Attributes</span><span class="o">.</span><span class="n">entry</span><span class="mf">.9</span><span class="o">.</span><span class="n">value</span><span class="o">=</span><span class="n">true</span><span class="o">|</span><span class="n">false</span><span class="p">]</span>
<span class="p">[</span><span class="o">&amp;</span><span class="n">Attributes</span><span class="o">.</span><span class="n">entry</span><span class="mf">.10</span><span class="o">.</span><span class="n">key</span><span class="o">=</span><span class="n">cloudevents</span><span class="o">&amp;</span><span class="n">Attributes</span><span class="o">.</span><span class="n">entry</span><span class="mf">.10</span><span class="o">.</span><span class="n">value</span><span class="o">=</span><span class="n">true</span><span class="o">|</span><span class="n">false</span><span class="p">]</span>
</pre></div>
</div>
<p>Request parameters:</p>
<ul class="simple">
<li><p>push-endpoint: URI of an endpoint to send push notification to</p></li>
<li><p>OpaqueData: opaque data is set in the topic configuration and added to all notifications triggered by the topic</p></li>
<li><p>persistent: indication whether notifications to this endpoint are persistent (=asynchronous) or not (“false” by default)</p></li>
<li><p>HTTP endpoint</p></li>
</ul>
<blockquote>
<div><ul class="simple">
<li><p>URI: <code class="docutils literal notranslate"><span class="pre">http[s]://&lt;fqdn&gt;[:&lt;port]</span></code></p></li>
<li><p>port defaults to: 80/443 for HTTP/S accordingly</p></li>
<li><p>verify-ssl: indicate whether the server certificate is validated by the client or not (“true” by default)</p></li>
<li><p>cloudevents: indicate whether the HTTP header should contain attributes according to the <a class="reference external" href="https://github.com/cloudevents/spec/blob/main/cloudevents/adapters/aws-s3.md">S3 CloudEvents Spec</a> (“false” by default)</p></li>
</ul>
</div></blockquote>
<ul class="simple">
<li><p>AMQP0.9.1 endpoint</p></li>
</ul>
<blockquote>
<div><ul class="simple">
<li><p>URI: <code class="docutils literal notranslate"><span class="pre">amqp[s]://[&lt;user&gt;:&lt;password&gt;&#64;]&lt;fqdn&gt;[:&lt;port&gt;][/&lt;vhost&gt;]</span></code></p></li>
<li><p>user/password defaults to: guest/guest</p></li>
<li><p>user/password may only be provided over HTTPS. If not, topic creation request will be rejected.</p></li>
<li><p>port defaults to: 5672/5671 for unencrypted/SSL-encrypted connections</p></li>
<li><p>vhost defaults to: “/”</p></li>
<li><p>verify-ssl: indicate whether the server certificate is validated by the client or not (“true” by default)</p></li>
<li><p>if <code class="docutils literal notranslate"><span class="pre">ca-location</span></code> is provided, and secure connection is used, the specified CA will be used, instead of the default one, to authenticate the broker</p></li>
<li><p>amqp-exchange: the exchanges must exist and be able to route messages based on topics (mandatory parameter for AMQP0.9.1). Different topics pointing to the same endpoint must use the same exchange</p></li>
<li><p>amqp-ack-level: no end2end acking is required, as messages may persist in the broker before delivered into their final destination. Three ack methods exist:</p></li>
</ul>
<blockquote>
<div><ul class="simple">
<li><p>“none”: message is considered “delivered” if sent to broker</p></li>
<li><p>“broker”: message is considered “delivered” if acked by broker (default)</p></li>
<li><p>“routable”: message is considered “delivered” if broker can route to a consumer</p></li>
</ul>
</div></blockquote>
</div></blockquote>
<div class="admonition tip">
<p class="admonition-title">Tip</p>
<p>The topic-name (see <a class="reference internal" href="../pubsub-module/#radosgw-create-a-topic"><span class="std std-ref">Create a Topic</span></a>) is used for the AMQP topic (“routing key” for a topic exchange)</p>
</div>
<ul class="simple">
<li><p>Kafka endpoint</p></li>
</ul>
<blockquote>
<div><ul class="simple">
<li><p>URI: <code class="docutils literal notranslate"><span class="pre">kafka://[&lt;user&gt;:&lt;password&gt;&#64;]&lt;fqdn&gt;[:&lt;port]</span></code></p></li>
<li><p>if <code class="docutils literal notranslate"><span class="pre">use-ssl</span></code> is set to “true”, secure connection will be used for connecting with the broker (“false” by default)</p></li>
<li><p>if <code class="docutils literal notranslate"><span class="pre">ca-location</span></code> is provided, and secure connection is used, the specified CA will be used, instead of the default one, to authenticate the broker</p></li>
<li><p>user/password may only be provided over HTTPS. If not, topic creation request will be rejected.</p></li>
<li><p>user/password may only be provided together with <code class="docutils literal notranslate"><span class="pre">use-ssl</span></code>, if not, the connection to the broker would fail.</p></li>
<li><p>port defaults to: 9092</p></li>
<li><p>kafka-ack-level: no end2end acking is required, as messages may persist in the broker before delivered into their final destination. Two ack methods exist:</p></li>
</ul>
<blockquote>
<div><ul class="simple">
<li><p>“none”: message is considered “delivered” if sent to broker</p></li>
<li><p>“broker”: message is considered “delivered” if acked by broker (default)</p></li>
</ul>
</div></blockquote>
</div></blockquote>
<div class="admonition note">
<p class="admonition-title">Note</p>
<ul class="simple">
<li><p>The key/value of a specific parameter does not have to reside in the same line, or in any specific order, but must use the same index</p></li>
<li><p>Attribute indexing does not need to be sequential or start from any specific value</p></li>
<li><p><a class="reference external" href="https://docs.aws.amazon.com/sns/latest/api/API_CreateTopic.html">AWS Create Topic</a> has a detailed explanation of the endpoint attributes format. However, in our case different keys and values are used</p></li>
</ul>
</div>
<p>The response will have the following format:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o">&lt;</span><span class="n">CreateTopicResponse</span> <span class="n">xmlns</span><span class="o">=</span><span class="s2">&quot;https://sns.amazonaws.com/doc/2010-03-31/&quot;</span><span class="o">&gt;</span>
    <span class="o">&lt;</span><span class="n">CreateTopicResult</span><span class="o">&gt;</span>
        <span class="o">&lt;</span><span class="n">TopicArn</span><span class="o">&gt;&lt;/</span><span class="n">TopicArn</span><span class="o">&gt;</span>
    <span class="o">&lt;/</span><span class="n">CreateTopicResult</span><span class="o">&gt;</span>
    <span class="o">&lt;</span><span class="n">ResponseMetadata</span><span class="o">&gt;</span>
        <span class="o">&lt;</span><span class="n">RequestId</span><span class="o">&gt;&lt;/</span><span class="n">RequestId</span><span class="o">&gt;</span>
    <span class="o">&lt;/</span><span class="n">ResponseMetadata</span><span class="o">&gt;</span>
<span class="o">&lt;/</span><span class="n">CreateTopicResponse</span><span class="o">&gt;</span>
</pre></div>
</div>
<p>The topic ARN in the response will have the following format:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">arn</span><span class="p">:</span><span class="n">aws</span><span class="p">:</span><span class="n">sns</span><span class="p">:</span><span class="o">&lt;</span><span class="n">zone</span><span class="o">-</span><span class="n">group</span><span class="o">&gt;</span><span class="p">:</span><span class="o">&lt;</span><span class="n">tenant</span><span class="o">&gt;</span><span class="p">:</span><span class="o">&lt;</span><span class="n">topic</span><span class="o">&gt;</span>
</pre></div>
</div>
</div>
<div class="section" id="get-topic-attributes">
<h4><a class="toc-backref" href="#id8">Get Topic Attributes</a><a class="headerlink" href="#get-topic-attributes" title="Permalink to this headline">¶</a></h4>
<p>Returns information about a specific topic. This includes push-endpoint information, if provided.</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">POST</span>

<span class="n">Action</span><span class="o">=</span><span class="n">GetTopicAttributes</span>
<span class="o">&amp;</span><span class="n">TopicArn</span><span class="o">=&lt;</span><span class="n">topic</span><span class="o">-</span><span class="n">arn</span><span class="o">&gt;</span>
</pre></div>
</div>
<p>Response will have the following format:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o">&lt;</span><span class="n">GetTopicAttributesResponse</span><span class="o">&gt;</span>
    <span class="o">&lt;</span><span class="n">GetTopicAttributesResult</span><span class="o">&gt;</span>
        <span class="o">&lt;</span><span class="n">Attributes</span><span class="o">&gt;</span>
            <span class="o">&lt;</span><span class="n">entry</span><span class="o">&gt;</span>
                <span class="o">&lt;</span><span class="n">key</span><span class="o">&gt;</span><span class="n">User</span><span class="o">&lt;/</span><span class="n">key</span><span class="o">&gt;</span>
                <span class="o">&lt;</span><span class="n">value</span><span class="o">&gt;&lt;/</span><span class="n">value</span><span class="o">&gt;</span>
            <span class="o">&lt;/</span><span class="n">entry</span><span class="o">&gt;</span>
            <span class="o">&lt;</span><span class="n">entry</span><span class="o">&gt;</span>
                <span class="o">&lt;</span><span class="n">key</span><span class="o">&gt;</span><span class="n">Name</span><span class="o">&lt;/</span><span class="n">key</span><span class="o">&gt;</span>
                <span class="o">&lt;</span><span class="n">value</span><span class="o">&gt;&lt;/</span><span class="n">value</span><span class="o">&gt;</span>
            <span class="o">&lt;/</span><span class="n">entry</span><span class="o">&gt;</span>
            <span class="o">&lt;</span><span class="n">entry</span><span class="o">&gt;</span>
                <span class="o">&lt;</span><span class="n">key</span><span class="o">&gt;</span><span class="n">EndPoint</span><span class="o">&lt;/</span><span class="n">key</span><span class="o">&gt;</span>
                <span class="o">&lt;</span><span class="n">value</span><span class="o">&gt;&lt;/</span><span class="n">value</span><span class="o">&gt;</span>
            <span class="o">&lt;/</span><span class="n">entry</span><span class="o">&gt;</span>
            <span class="o">&lt;</span><span class="n">entry</span><span class="o">&gt;</span>
                <span class="o">&lt;</span><span class="n">key</span><span class="o">&gt;</span><span class="n">TopicArn</span><span class="o">&lt;/</span><span class="n">key</span><span class="o">&gt;</span>
                <span class="o">&lt;</span><span class="n">value</span><span class="o">&gt;&lt;/</span><span class="n">value</span><span class="o">&gt;</span>
            <span class="o">&lt;/</span><span class="n">entry</span><span class="o">&gt;</span>
            <span class="o">&lt;</span><span class="n">entry</span><span class="o">&gt;</span>
                <span class="o">&lt;</span><span class="n">key</span><span class="o">&gt;</span><span class="n">OpaqueData</span><span class="o">&lt;/</span><span class="n">key</span><span class="o">&gt;</span>
                <span class="o">&lt;</span><span class="n">value</span><span class="o">&gt;&lt;/</span><span class="n">value</span><span class="o">&gt;</span>
            <span class="o">&lt;/</span><span class="n">entry</span><span class="o">&gt;</span>
        <span class="o">&lt;/</span><span class="n">Attributes</span><span class="o">&gt;</span>
    <span class="o">&lt;/</span><span class="n">GetTopicAttributesResult</span><span class="o">&gt;</span>
    <span class="o">&lt;</span><span class="n">ResponseMetadata</span><span class="o">&gt;</span>
        <span class="o">&lt;</span><span class="n">RequestId</span><span class="o">&gt;&lt;/</span><span class="n">RequestId</span><span class="o">&gt;</span>
    <span class="o">&lt;/</span><span class="n">ResponseMetadata</span><span class="o">&gt;</span>
<span class="o">&lt;/</span><span class="n">GetTopicAttributesResponse</span><span class="o">&gt;</span>
</pre></div>
</div>
<ul class="simple">
<li><p>User: name of the user that created the topic</p></li>
<li><p>Name: name of the topic</p></li>
<li><dl class="simple">
<dt>EndPoint: JSON formatted endpoint parameters, including:</dt><dd><ul>
<li><p>EndpointAddress: the push-endpoint URL</p></li>
<li><p>EndpointArgs: the push-endpoint args</p></li>
<li><p>EndpointTopic: the topic name that should be sent to the endpoint (may be different than the above topic name)</p></li>
<li><p>HasStoredSecret: “true” if if endpoint URL contain user/password information. In this case request must be made over HTTPS. If not, topic get request will be rejected</p></li>
<li><p>Persistent: “true” is topic is persistent</p></li>
</ul>
</dd>
</dl>
</li>
<li><p>TopicArn: topic ARN</p></li>
<li><p>OpaqueData: the opaque data set on the topic</p></li>
</ul>
</div>
<div class="section" id="get-topic-information">
<h4><a class="toc-backref" href="#id9">Get Topic Information</a><a class="headerlink" href="#get-topic-information" title="Permalink to this headline">¶</a></h4>
<p>Returns information about specific topic. This includes push-endpoint information, if provided.
Note that this API is now deprecated in favor of the AWS compliant <cite>GetTopicAttributes</cite> API.</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">POST</span>

<span class="n">Action</span><span class="o">=</span><span class="n">GetTopic</span>
<span class="o">&amp;</span><span class="n">TopicArn</span><span class="o">=&lt;</span><span class="n">topic</span><span class="o">-</span><span class="n">arn</span><span class="o">&gt;</span>
</pre></div>
</div>
<p>Response will have the following format:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o">&lt;</span><span class="n">GetTopicResponse</span><span class="o">&gt;</span>
    <span class="o">&lt;</span><span class="n">GetTopicResult</span><span class="o">&gt;</span>
        <span class="o">&lt;</span><span class="n">Topic</span><span class="o">&gt;</span>
            <span class="o">&lt;</span><span class="n">User</span><span class="o">&gt;&lt;/</span><span class="n">User</span><span class="o">&gt;</span>
            <span class="o">&lt;</span><span class="n">Name</span><span class="o">&gt;&lt;/</span><span class="n">Name</span><span class="o">&gt;</span>
            <span class="o">&lt;</span><span class="n">EndPoint</span><span class="o">&gt;</span>
                <span class="o">&lt;</span><span class="n">EndpointAddress</span><span class="o">&gt;&lt;/</span><span class="n">EndpointAddress</span><span class="o">&gt;</span>
                <span class="o">&lt;</span><span class="n">EndpointArgs</span><span class="o">&gt;&lt;/</span><span class="n">EndpointArgs</span><span class="o">&gt;</span>
                <span class="o">&lt;</span><span class="n">EndpointTopic</span><span class="o">&gt;&lt;/</span><span class="n">EndpointTopic</span><span class="o">&gt;</span>
                <span class="o">&lt;</span><span class="n">HasStoredSecret</span><span class="o">&gt;&lt;/</span><span class="n">HasStoredSecret</span><span class="o">&gt;</span>
                <span class="o">&lt;</span><span class="n">Persistent</span><span class="o">&gt;&lt;/</span><span class="n">Persistent</span><span class="o">&gt;</span>
            <span class="o">&lt;/</span><span class="n">EndPoint</span><span class="o">&gt;</span>
            <span class="o">&lt;</span><span class="n">TopicArn</span><span class="o">&gt;&lt;/</span><span class="n">TopicArn</span><span class="o">&gt;</span>
            <span class="o">&lt;</span><span class="n">OpaqueData</span><span class="o">&gt;&lt;/</span><span class="n">OpaqueData</span><span class="o">&gt;</span>
        <span class="o">&lt;/</span><span class="n">Topic</span><span class="o">&gt;</span>
    <span class="o">&lt;/</span><span class="n">GetTopicResult</span><span class="o">&gt;</span>
    <span class="o">&lt;</span><span class="n">ResponseMetadata</span><span class="o">&gt;</span>
        <span class="o">&lt;</span><span class="n">RequestId</span><span class="o">&gt;&lt;/</span><span class="n">RequestId</span><span class="o">&gt;</span>
    <span class="o">&lt;/</span><span class="n">ResponseMetadata</span><span class="o">&gt;</span>
<span class="o">&lt;/</span><span class="n">GetTopicResponse</span><span class="o">&gt;</span>
</pre></div>
</div>
<ul class="simple">
<li><p>User: name of the user that created the topic</p></li>
<li><p>Name: name of the topic</p></li>
<li><p>EndpointAddress: the push-endpoint URL</p></li>
<li><p>EndpointArgs: the push-endpoint args</p></li>
<li><p>EndpointTopic: the topic name that should be sent to the endpoint (may be different than the above topic name)</p></li>
<li><p>HasStoredSecret: “true” if endpoint URL contain user/password information. In this case request must be made over HTTPS. If not, topic get request will be rejected</p></li>
<li><p>Persistent: “true” is topic is persistent</p></li>
<li><p>TopicArn: topic ARN</p></li>
<li><p>OpaqueData: the opaque data set on the topic</p></li>
</ul>
</div>
<div class="section" id="delete-topic">
<h4><a class="toc-backref" href="#id10">Delete Topic</a><a class="headerlink" href="#delete-topic" title="Permalink to this headline">¶</a></h4>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">POST</span>

<span class="n">Action</span><span class="o">=</span><span class="n">DeleteTopic</span>
<span class="o">&amp;</span><span class="n">TopicArn</span><span class="o">=&lt;</span><span class="n">topic</span><span class="o">-</span><span class="n">arn</span><span class="o">&gt;</span>
</pre></div>
</div>
<p>Delete the specified topic.</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<ul class="simple">
<li><p>Deleting an unknown notification (e.g. double delete) is not considered an error</p></li>
<li><p>Deleting a topic does not automatically delete all notifications associated with it</p></li>
</ul>
</div>
<p>The response will have the following format:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o">&lt;</span><span class="n">DeleteTopicResponse</span> <span class="n">xmlns</span><span class="o">=</span><span class="s2">&quot;https://sns.amazonaws.com/doc/2010-03-31/&quot;</span><span class="o">&gt;</span>
    <span class="o">&lt;</span><span class="n">ResponseMetadata</span><span class="o">&gt;</span>
        <span class="o">&lt;</span><span class="n">RequestId</span><span class="o">&gt;&lt;/</span><span class="n">RequestId</span><span class="o">&gt;</span>
    <span class="o">&lt;/</span><span class="n">ResponseMetadata</span><span class="o">&gt;</span>
<span class="o">&lt;/</span><span class="n">DeleteTopicResponse</span><span class="o">&gt;</span>
</pre></div>
</div>
</div>
<div class="section" id="list-topics">
<h4><a class="toc-backref" href="#id11">List Topics</a><a class="headerlink" href="#list-topics" title="Permalink to this headline">¶</a></h4>
<p>List all topics associated with a tenant.</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">POST</span>

<span class="n">Action</span><span class="o">=</span><span class="n">ListTopics</span>
</pre></div>
</div>
<p>Response will have the following format:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o">&lt;</span><span class="n">ListTopicsResponse</span> <span class="n">xmlns</span><span class="o">=</span><span class="s2">&quot;https://sns.amazonaws.com/doc/2010-03-31/&quot;</span><span class="o">&gt;</span>
    <span class="o">&lt;</span><span class="n">ListTopicsResult</span><span class="o">&gt;</span>
        <span class="o">&lt;</span><span class="n">Topics</span><span class="o">&gt;</span>
            <span class="o">&lt;</span><span class="n">member</span><span class="o">&gt;</span>
                <span class="o">&lt;</span><span class="n">User</span><span class="o">&gt;&lt;/</span><span class="n">User</span><span class="o">&gt;</span>
                <span class="o">&lt;</span><span class="n">Name</span><span class="o">&gt;&lt;/</span><span class="n">Name</span><span class="o">&gt;</span>
                <span class="o">&lt;</span><span class="n">EndPoint</span><span class="o">&gt;</span>
                    <span class="o">&lt;</span><span class="n">EndpointAddress</span><span class="o">&gt;&lt;/</span><span class="n">EndpointAddress</span><span class="o">&gt;</span>
                    <span class="o">&lt;</span><span class="n">EndpointArgs</span><span class="o">&gt;&lt;/</span><span class="n">EndpointArgs</span><span class="o">&gt;</span>
                    <span class="o">&lt;</span><span class="n">EndpointTopic</span><span class="o">&gt;&lt;/</span><span class="n">EndpointTopic</span><span class="o">&gt;</span>
                <span class="o">&lt;/</span><span class="n">EndPoint</span><span class="o">&gt;</span>
                <span class="o">&lt;</span><span class="n">TopicArn</span><span class="o">&gt;&lt;/</span><span class="n">TopicArn</span><span class="o">&gt;</span>
                <span class="o">&lt;</span><span class="n">OpaqueData</span><span class="o">&gt;&lt;/</span><span class="n">OpaqueData</span><span class="o">&gt;</span>
            <span class="o">&lt;/</span><span class="n">member</span><span class="o">&gt;</span>
        <span class="o">&lt;/</span><span class="n">Topics</span><span class="o">&gt;</span>
    <span class="o">&lt;/</span><span class="n">ListTopicsResult</span><span class="o">&gt;</span>
    <span class="o">&lt;</span><span class="n">ResponseMetadata</span><span class="o">&gt;</span>
        <span class="o">&lt;</span><span class="n">RequestId</span><span class="o">&gt;&lt;/</span><span class="n">RequestId</span><span class="o">&gt;</span>
    <span class="o">&lt;/</span><span class="n">ResponseMetadata</span><span class="o">&gt;</span>
<span class="o">&lt;/</span><span class="n">ListTopicsResponse</span><span class="o">&gt;</span>
</pre></div>
</div>
<ul class="simple">
<li><p>if endpoint URL contain user/password information, in any of the topic, request must be made over HTTPS. If not, topic list request will be rejected.</p></li>
</ul>
</div>
</div>
<div class="section" id="notifications">
<h3><a class="toc-backref" href="#id12">Notifications</a><a class="headerlink" href="#notifications" title="Permalink to this headline">¶</a></h3>
<p>Detailed under: <a class="reference external" href="../s3/bucketops">Bucket Operations</a>.</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<ul class="simple">
<li><p>“Abort Multipart Upload” request does not emit a notification</p></li>
<li><p>Both “Initiate Multipart Upload” and “POST Object” requests will emit an <code class="docutils literal notranslate"><span class="pre">s3:ObjectCreated:Post</span></code> notification</p></li>
</ul>
</div>
</div>
<div class="section" id="events">
<h3><a class="toc-backref" href="#id13">Events</a><a class="headerlink" href="#events" title="Permalink to this headline">¶</a></h3>
<p>The events are in JSON format (regardless of the actual endpoint), and share the same structure as the S3-compatible events
pushed or pulled using the pubsub sync module. For example:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">{</span><span class="s2">&quot;Records&quot;</span><span class="p">:[</span>
    <span class="p">{</span>
        <span class="s2">&quot;eventVersion&quot;</span><span class="p">:</span><span class="s2">&quot;2.1&quot;</span><span class="p">,</span>
        <span class="s2">&quot;eventSource&quot;</span><span class="p">:</span><span class="s2">&quot;ceph:s3&quot;</span><span class="p">,</span>
        <span class="s2">&quot;awsRegion&quot;</span><span class="p">:</span><span class="s2">&quot;us-east-1&quot;</span><span class="p">,</span>
        <span class="s2">&quot;eventTime&quot;</span><span class="p">:</span><span class="s2">&quot;2019-11-22T13:47:35.124724Z&quot;</span><span class="p">,</span>
        <span class="s2">&quot;eventName&quot;</span><span class="p">:</span><span class="s2">&quot;ObjectCreated:Put&quot;</span><span class="p">,</span>
        <span class="s2">&quot;userIdentity&quot;</span><span class="p">:{</span>
            <span class="s2">&quot;principalId&quot;</span><span class="p">:</span><span class="s2">&quot;tester&quot;</span>
        <span class="p">},</span>
        <span class="s2">&quot;requestParameters&quot;</span><span class="p">:{</span>
            <span class="s2">&quot;sourceIPAddress&quot;</span><span class="p">:</span><span class="s2">&quot;&quot;</span>
        <span class="p">},</span>
        <span class="s2">&quot;responseElements&quot;</span><span class="p">:{</span>
            <span class="s2">&quot;x-amz-request-id&quot;</span><span class="p">:</span><span class="s2">&quot;503a4c37-85eb-47cd-8681-2817e80b4281.5330.903595&quot;</span><span class="p">,</span>
            <span class="s2">&quot;x-amz-id-2&quot;</span><span class="p">:</span><span class="s2">&quot;14d2-zone1-zonegroup1&quot;</span>
        <span class="p">},</span>
        <span class="s2">&quot;s3&quot;</span><span class="p">:{</span>
            <span class="s2">&quot;s3SchemaVersion&quot;</span><span class="p">:</span><span class="s2">&quot;1.0&quot;</span><span class="p">,</span>
            <span class="s2">&quot;configurationId&quot;</span><span class="p">:</span><span class="s2">&quot;mynotif1&quot;</span><span class="p">,</span>
            <span class="s2">&quot;bucket&quot;</span><span class="p">:{</span>
                <span class="s2">&quot;name&quot;</span><span class="p">:</span><span class="s2">&quot;mybucket1&quot;</span><span class="p">,</span>
                <span class="s2">&quot;ownerIdentity&quot;</span><span class="p">:{</span>
                    <span class="s2">&quot;principalId&quot;</span><span class="p">:</span><span class="s2">&quot;tester&quot;</span>
                <span class="p">},</span>
                <span class="s2">&quot;arn&quot;</span><span class="p">:</span><span class="s2">&quot;arn:aws:s3:us-east-1::mybucket1&quot;</span><span class="p">,</span>
                <span class="s2">&quot;id&quot;</span><span class="p">:</span><span class="s2">&quot;503a4c37-85eb-47cd-8681-2817e80b4281.5332.38&quot;</span>
            <span class="p">},</span>
            <span class="s2">&quot;object&quot;</span><span class="p">:{</span>
                <span class="s2">&quot;key&quot;</span><span class="p">:</span><span class="s2">&quot;myimage1.jpg&quot;</span><span class="p">,</span>
                <span class="s2">&quot;size&quot;</span><span class="p">:</span><span class="s2">&quot;1024&quot;</span><span class="p">,</span>
                <span class="s2">&quot;eTag&quot;</span><span class="p">:</span><span class="s2">&quot;37b51d194a7513e45b56f6524f2d51f2&quot;</span><span class="p">,</span>
                <span class="s2">&quot;versionId&quot;</span><span class="p">:</span><span class="s2">&quot;&quot;</span><span class="p">,</span>
                <span class="s2">&quot;sequencer&quot;</span><span class="p">:</span> <span class="s2">&quot;F7E6D75DC742D108&quot;</span><span class="p">,</span>
                <span class="s2">&quot;metadata&quot;</span><span class="p">:[],</span>
                <span class="s2">&quot;tags&quot;</span><span class="p">:[]</span>
            <span class="p">}</span>
        <span class="p">},</span>
        <span class="s2">&quot;eventId&quot;</span><span class="p">:</span><span class="s2">&quot;&quot;</span><span class="p">,</span>
        <span class="s2">&quot;opaqueData&quot;</span><span class="p">:</span><span class="s2">&quot;me@example.com&quot;</span>
    <span class="p">}</span>
<span class="p">]}</span>
</pre></div>
</div>
<ul class="simple">
<li><p>awsRegion: zonegroup</p></li>
<li><p>eventTime: timestamp indicating when the event was triggered</p></li>
<li><p>eventName: for list of supported events see: <a class="reference external" href="../s3-notification-compatibility">S3 Notification Compatibility</a>. Note that the eventName values do not start with the <cite>s3:</cite> prefix.</p></li>
<li><p>userIdentity.principalId: user that triggered the change</p></li>
<li><p>requestParameters.sourceIPAddress: not supported</p></li>
<li><p>responseElements.x-amz-request-id: request ID of the original change</p></li>
<li><p>responseElements.x_amz_id_2: RGW on which the change was made</p></li>
<li><p>s3.configurationId: notification ID that created the event</p></li>
<li><p>s3.bucket.name: name of the bucket</p></li>
<li><p>s3.bucket.ownerIdentity.principalId: owner of the bucket</p></li>
<li><p>s3.bucket.arn: ARN of the bucket</p></li>
<li><p>s3.bucket.id: Id of the bucket (an extension to the S3 notification API)</p></li>
<li><p>s3.object.key: object key</p></li>
<li><p>s3.object.size: object size</p></li>
<li><p>s3.object.eTag: object etag</p></li>
<li><p>s3.object.versionId: object version in case of versioned bucket.
When doing a copy, it would include the version of the target object.
When creating a delete marker, it would include the version of the delete marker.</p></li>
<li><p>s3.object.sequencer: monotonically increasing identifier of the change per object (hexadecimal format)</p></li>
<li><p>s3.object.metadata: any metadata set on the object sent as: <code class="docutils literal notranslate"><span class="pre">x-amz-meta-</span></code> (an extension to the S3 notification API)</p></li>
<li><p>s3.object.tags: any tags set on the object (an extension to the S3 notification API)</p></li>
<li><p>s3.eventId: unique ID of the event, that could be used for acking (an extension to the S3 notification API)</p></li>
<li><p>s3.opaqueData: opaque data is set in the topic configuration and added to all notifications triggered by the topic (an extension to the S3 notification API)</p></li>
</ul>
</div>
</div>
</div>



           </div>
           
          </div>
          <footer>
    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
        <a href="../layout/" class="btn btn-neutral float-right" title="Rados 网关的数据布局" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
        <a href="../archive-sync-module/" class="btn btn-neutral float-left" title="Archive 同步模块" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
    </div>

  <hr/>

  <div role="contentinfo">
    <p>
        &#169; Copyright 2016, Ceph authors and contributors. Licensed under Creative Commons Attribution Share Alike 3.0 (CC-BY-SA-3.0).

    </p>
  </div> 

</footer>
        </div>
      </div>

    </section>

  </div>
  

  <script type="text/javascript">
      jQuery(function () {
          SphinxRtdTheme.Navigation.enable(true);
      });
  </script>

  
  
    
   

</body>
</html>